home *** CD-ROM | disk | FTP | other *** search
/ Plug-In Power Pack for Netscape Communicator / Plug-In Power Pack for Netscape Communicator.iso / plugins / dataviews / dvtools / demos / telecomdemo / fixbox.c < prev    next >
C/C++ Source or Header  |  1997-06-16  |  8KB  |  230 lines

  1. #ifndef lint
  2. static char SccsId[]= "@(#)fixbox.c    V1.8    3/17/95";
  3. #endif
  4.  
  5. /*
  6.  |    File name: fixbox.c
  7.  |========================================================================
  8.  |
  9.  |    Copyright (c) 1990 -- V.I. Corporation
  10.  |
  11.  |========================================================================
  12.  */
  13.  
  14. #include "simulate.h"
  15. #include "tlc_fundecl.h"
  16. #include "GRkeysym.h"
  17.  
  18. /***************** Begin Function Declarations *************/
  19. LOCAL  char *RandomSerialNumber V_P_((void));
  20. /***************** End Function Declarations *************/
  21.  
  22. /*
  23.  *   LoadFixboxView -- load the fixbox view, find the interesting objects,
  24.  *     and create a drawport.
  25.  */
  26. void 
  27. LoadFixboxView (viewname)
  28.      char *viewname;
  29. {
  30.   OBJECT drawing;
  31.   RECTANGLE area, dummy;
  32.   DATASOURCE ds;
  33.   DSVAR dsvar;
  34.  
  35.   Fixbox.disp_info.view = TviLoad (viewname);
  36.   drawing = TviGetDrawing (Fixbox.disp_info.view);
  37.  
  38.   /*
  39.    *   Extract the interesting objects from the drawing.  Also, find the center
  40.    *     of the text input object to use as the input point for all key strokes.
  41.    */
  42.   Fixbox.equip_type_str = TdrGetNamedObject (drawing, "EquipType");
  43.   Fixbox.equip_manuf_str = TdrGetNamedObject (drawing, "EquipManuf");
  44.   Fixbox.equip_ser_num_str = TdrGetNamedObject (drawing, "EquipSerialNum");
  45.   Fixbox.service_addr_str = TdrGetNamedObject (drawing, "ServiceAddress");
  46.   Fixbox.service_contact_str = TdrGetNamedObject (drawing, "ServiceContact");
  47.   Fixbox.confirm_input = TdrGetNamedObject (drawing, "ConfirmInput");
  48.   VOobBox (Fixbox.confirm_input, &area, &dummy);
  49.   Fixbox.input_point.x = area.ll.x + (area.ur.x - area.ll.x);
  50.   Fixbox.input_point.y = area.ll.y + (area.ur.y - area.ll.y);
  51.  
  52.   /*
  53.    *   Find the correct datasource variable and rebind it.
  54.    */
  55.   ds = TdlGetNamedDataSource (TviGetDataSourceList (Fixbox.disp_info.view),
  56.                               "Vars");
  57.   dsvar = TdsGetNamedDsVar (ds, "ConfirmString");
  58.   Fixbox.confirm_str = (CHAR *) TdsvGetBuffer (dsvar);
  59.  
  60.   /*
  61.    *   Get the limits of the drawing and use them as the screen position
  62.    *     for the drawport.
  63.    */
  64.   (VOID) VOobBox (drawing, &Fixbox.disp_info.drawing_area, &dummy);
  65.   Fixbox.disp_info.virt_pos.ll.x = Fixbox.disp_info.drawing_area.ll.x + 16383;
  66.   Fixbox.disp_info.virt_pos.ll.y = Fixbox.disp_info.drawing_area.ll.y + 16383;
  67.   Fixbox.disp_info.virt_pos.ur.x = Fixbox.disp_info.drawing_area.ur.x + 16383;
  68.   Fixbox.disp_info.virt_pos.ur.y = Fixbox.disp_info.drawing_area.ur.y + 16383;
  69.   (VOID) GRvcs_to_scs (&Fixbox.disp_info.virt_pos.ll,
  70.                        &Fixbox.disp_info.screen_pos.ll);
  71.   (VOID) GRvcs_to_scs (&Fixbox.disp_info.virt_pos.ur,
  72.                        &Fixbox.disp_info.screen_pos.ur);
  73.  
  74.   /*
  75.    *   Create the drawport and initialize the other fields in the
  76.    *     structure.
  77.    */
  78.   Fixbox.disp_info.drawport = TdpCreateStretch (StatusScreen,
  79.                                                 Fixbox.disp_info.view,
  80.                                            &Fixbox.disp_info.virt_pos,
  81.                                       &Fixbox.disp_info.drawing_area);
  82.   Fixbox.disp_info.drawn = NO;
  83.   Fixbox.disp_info.active = NO;
  84.   Fixbox.part_ptr = NULL;
  85. }
  86.  
  87.  
  88. /*
  89.  *   InputInFixboxDrawport -- handle input to the fixbox drawport.\
  90.  */
  91. void 
  92. InputInFixboxDrawport (location)
  93.      OBJECT location;
  94. {
  95.   INT key;
  96.   DV_POINT screen_pt;
  97.   CHAR *name;
  98.  
  99.   /*
  100.    *   If there is a key press, then it's one of two things.  If it's a
  101.    *     newline, then if the input string is not empty, then erase the
  102.    *     drawport.  If it's any other keypress, then build a fake location
  103.    *     object to stuff the input into the text input object.
  104.    */
  105.   if (VOloType (location) == V_KEYPRESS)
  106.     {
  107.       key = VOloKeySym (location);
  108.       if ('\r' == key || '\n' == key || XK_Linefeed == key)
  109.         {
  110.           if (*Fixbox.confirm_str != '\0')
  111.             {
  112.               Fixbox.part_ptr->fix_time = SimParams.iter_number + FIX_DELAY;
  113.               OutputInfo ((INT) SimParams.iter_number, FIX_ORDER,
  114.                       Fixbox.part_ptr->part_name, Fixbox.confirm_str);
  115.               EraseSubView (&Fixbox.disp_info, (RECTANGLE *) NULL);
  116.             }
  117.         }
  118.       else
  119.         {
  120.           WINEVENT* we = VOloWinEventGet (location);
  121.           (VOID) TdpWorldToScreen (Fixbox.disp_info.drawport,
  122.                                    &Fixbox.input_point, &screen_pt);
  123.           we->loc.x = screen_pt.x;
  124.           we->loc.y = screen_pt.y;
  125.           (VOID) TloWinEventSetup (location, we, StatusScreen, 
  126.                                    Fixbox.disp_info.drawport);
  127.           (VOID) VUerHandleLocEvent (location);
  128.         }
  129.     }
  130.  
  131.   /*
  132.    *   If the the object picked is the quit icon, then take away the
  133.    *     drawport without fixing the part.
  134.    */
  135.   else if ((name = TloGetSelectedObjectName (location)))
  136.     {
  137.       if (strcmp (name, "Quit") == 0)
  138.         EraseSubView (&Fixbox.disp_info, (RECTANGLE *) NULL);
  139.     }
  140.   else
  141.     ToFront (&Fixbox.disp_info);
  142. }
  143.  
  144.  
  145. /*
  146.  *   SetupFixbox -- set up the fixbox drawport based on the part being fixed.
  147.  */
  148. void 
  149. SetupFixbox (part_struct, part_type)
  150.      PART_STRUCT *part_struct;
  151.      char *part_type;
  152. {
  153.   INT indx;
  154.  
  155.   /*
  156.    *   Find the type of the part.
  157.    */
  158.   if (strncmp (part_type, "crt", 3) == 0)
  159.     indx = CRT;
  160.   else if (strncmp (part_type, "x25net", 6) == 0)
  161.     indx = X25NET;
  162.   else if (strncmp (part_type, "cpu", 3) == 0)
  163.     indx = CPU;
  164.   else if (strncmp (part_type, "mux", 3) == 0)
  165.     indx = MUX;
  166.   else if (strncmp (part_type, "switch", 6) == 0)
  167.     indx = SWITCH;
  168.   else if (strncmp (part_type, "genpac", 6) == 0)
  169.     indx = GENPAC;
  170.   else if (strncmp (part_type, "pbx", 3) == 0)
  171.     indx = PBX;
  172.   else if (strncmp (part_type, "chcard", 6) == 0)
  173.     indx = CHAN_CARD;
  174.   else if (strncmp (part_type, "tel", 3) == 0)
  175.     indx = TELEPHONE;
  176.  
  177.   /*
  178.    *   Load up the view with the correct information using a random
  179.    *     serial number.
  180.    */
  181.   VOvtSetString (Fixbox.equip_type_str, Parts[indx].type);
  182.   VOvtSetString (Fixbox.equip_manuf_str, Parts[indx].manuf);
  183.   VOvtSetString (Fixbox.equip_ser_num_str, RandomSerialNumber ());
  184.   VOvtSetString (Fixbox.service_addr_str, Parts[indx].service_addr);
  185.   VOvtSetString (Fixbox.service_contact_str, Parts[indx].service_contact);
  186.  
  187.   *Fixbox.confirm_str = '\0';
  188.   Fixbox.part_ptr = part_struct;
  189. }
  190.  
  191.  
  192. /*
  193.  *   MoveFixboxDrawort -- move the fixbox drawport to a new position.
  194.  */
  195. void 
  196. MoveFixboxDrawport (location)
  197.      OBJECT location;
  198. {
  199.   RECTANGLE old_pos;
  200.  
  201.   old_pos.ll.x = Fixbox.disp_info.screen_pos.ll.x;
  202.   old_pos.ll.y = Fixbox.disp_info.screen_pos.ll.y;
  203.   old_pos.ur.x = Fixbox.disp_info.screen_pos.ur.x;
  204.   old_pos.ur.y = Fixbox.disp_info.screen_pos.ur.y;
  205.   MoveDrawport (StatusScreen, &Fixbox.disp_info.screen_pos, location);
  206.   NewPosition (&Fixbox.disp_info, &old_pos);
  207. }
  208.  
  209.  
  210. LOCAL CHAR ser_num_str[12];
  211.  
  212. /*
  213.  *   RandomSerialNumber -- compute a random serial number with a letter in
  214.  *     the first position, numbers in the 2nd through 9th position, and letters
  215.  *     in the last two positions.
  216.  */
  217. LOCAL char *RandomSerialNumber 
  218. V_P_ ((void))
  219. {
  220.   INT i;
  221.  
  222.   ser_num_str[0] = 'A' + (CHAR) (VUfrand ()* 26.0);
  223.   for (i = 1; i < 9; i++)
  224.     ser_num_str[i] = '0' + (CHAR) (VUfrand ()* 10.0);
  225.   ser_num_str[9] = 'A' + (CHAR) (VUfrand ()* 26.0);
  226.   ser_num_str[10] = 'A' + (CHAR) (VUfrand ()* 26.0);
  227.   ser_num_str[11] = '\0';
  228.   return ser_num_str;
  229. }
  230.